﻿namespace StockSharp.Algo.Indicators.Trend
{
	using System.ComponentModel;

	/// <summary>
	/// Скользящая средняя Welles Wilder.
	/// </summary>
	[DisplayName("WilderMA")]
	[Description("Скользящая средняя Welles Wilder.")]
	public class WilderMovingAverage : LengthIndicator<decimal>
	{
		/// <summary>
		/// Создать <see cref="WilderMovingAverage"/>.
		/// </summary>
		public WilderMovingAverage()
			: base(typeof(decimal))
		{
		}

		/// <summary>
		/// Обработать входное значение.
		/// </summary>
		/// <param name="input">Входное значение.</param>
		/// <returns>Результирующее значение.</returns>
		protected override decimal OnProcess(IIndicatorValue input)
		{
			if (IsFormed)
				Buffer.RemoveAt(0);

			var newValue = input.GetValue<decimal>();

			Buffer.Add(newValue);

			return (this.GetCurrentValue() * (Buffer.Count - 1) + newValue) / Buffer.Count;
		}
	}
}